#ifndef UnstructMG_MG_PROLONG_HPP
#define UnstructMG_MG_PROLONG_HPP

#include "par_CSRMatrix.hpp"

template<typename idx_t, typename data_t, int dof>
par_CSRMatrix<idx_t, data_t, data_t, dof>* Jacobi_A(const data_t weight,
    const par_CSRMatrix<idx_t, data_t, data_t, dof> & A);

extern template par_CSRMatrix<int, float , float , 1>* Jacobi_A(const float , const par_CSRMatrix_I32F32F32_DOF1 &);
extern template par_CSRMatrix<int, float , float , 2>* Jacobi_A(const float , const par_CSRMatrix_I32F32F32_DOF2 &);
extern template par_CSRMatrix<int, float , float , 3>* Jacobi_A(const float , const par_CSRMatrix_I32F32F32_DOF3 &);
extern template par_CSRMatrix<int, float , float , 4>* Jacobi_A(const float , const par_CSRMatrix_I32F32F32_DOF4 &);

extern template par_CSRMatrix<int, double, double, 1>* Jacobi_A(const double, const par_CSRMatrix_I32F64F64_DOF1 &);
extern template par_CSRMatrix<int, double, double, 2>* Jacobi_A(const double, const par_CSRMatrix_I32F64F64_DOF2 &);
extern template par_CSRMatrix<int, double, double, 3>* Jacobi_A(const double, const par_CSRMatrix_I32F64F64_DOF3 &);
extern template par_CSRMatrix<int, double, double, 4>* Jacobi_A(const double, const par_CSRMatrix_I32F64F64_DOF4 &);

#endif